package com.atguigu.gulimall.test.utils;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTCellImpl;

/**
 * 将aaa文件中的所有Study Subject ID开头的换成 “研究主题”，Protocol ID开头的换成“协议”。这个可以自己修改，根据需求不同灵活变化
 * @author sun
 *
 */
  
    public class WriteExcelPOI {
    
        public void writeExcelPOI() {
            try {

                String fileName = "E:\\销售货物或者提供应税劳务服务清单115)-迅捷PDF转换器.xlsx";  //修改d盘的aaa.xlsx文件
                XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(fileName));
                Map<String, String> fields = new HashMap<String, String>();
                fields = getFieldMap();  //获取要修改字段的集合
                String fillStr="";    //存储aaa文件里的数据
                String[] fillSplit=null; 
                XSSFSheet xSheet = xwb.getSheetAt(0);  //获取excel表的第一个sheet
                for (int i = 0; i <= xSheet.getLastRowNum(); i++) {  //遍历所有的行
                    if(xSheet.getRow(i)==null){ //这行为空执行下次循环
                        continue;
                    }
                    // 获取第四列的数据：xSheet.getRow(i).getCell(3)
                    if(xSheet.getRow(i).getCell(3)!=null){
                        fillStr = (xSheet.getRow(i)).getCell(3).toString();//获取当前单元格的数据
                        if(StringUtils.isNotEmpty(fillStr)){
                            if(fillStr.contains("*")){
                                continue;
                            }
                            String[] firstSplit = fillStr.split(",");
                            if(firstSplit!=null&&firstSplit.length>0){
                                String plateNumber = firstSplit[0];
                                String ar ="";

                                String[] addr = firstSplit[1].split("-");
                                // 起始地 省 市 区
                                String startAddr = addr[0];
                                // 目的地 省 市 区
                                String endAddr = addr[1];

                                String[] startAddrs = startAddr.split(" ");
                                String[] endAddrs = endAddr.split(" ");
                                // 起始地  如果是 市区县  就保留市
                                if(startAddrs[0].contains("市")){
                                    ar = startAddrs[0];
                                }else if(startAddrs[0].contains("省")){
                                    // 云F69456,云南省 红河哈尼族彝族自治州 开远市-云南省 红河哈尼族彝族自
                                    if((!startAddrs[1].contains("市"))&&(startAddrs.length>=3 )&&startAddrs[2].contains("市")){
                                        // 保留云南省开远市
                                        ar = startAddrs[0]+" "+startAddrs[2];
                                    }else {
                                        ar = startAddrs[0]+" "+startAddrs[1];
                                    }
                                }
                                ar=ar+"-";
                                // 目的地
                                if(endAddrs[0].contains("市")){
                                    ar=ar+endAddrs[0];
                                }else if(endAddrs[0].contains("省")){
                                    ar=ar+endAddrs[1];
                                }
                                ar = plateNumber+","+ar;
                                System.out.println("正确的格式："+ar);


                                fillSplit=fillStr.split(",");//切割，本人的数据是以"_"为分隔符的这个可以根据自己情况改变
//                               XSSFRow xRow = xSheet.createRow(i);
//                               XSSFCell xCell = xRow.createCell(j);


                                //xSheet.getRow(i).getCell(3);
                                XSSFCell xCell= xSheet.getRow(i).getCell(4); //获取单元格对象，这块不能向上边那两句代码那么写，不能用createXXX，用的话会只把第一列的数据改掉
                                if(xCell==null){
                                    xCell = xSheet.getRow(i).createCell(4);
                                    xCell.setCellValue(ar);//修改数据，看数据是否和字段集合中的数据匹配，不匹配使用元数据
                                }else{
                                    xCell.setCellValue(ar);//修改数据，看数据是否和字段集合中的数据匹配，不匹配使用元数据
                                }
                            }
                        }
                    }

//                    for (int j = 0; j <=  xSheet.getRow(i).getPhysicalNumberOfCells(); j++) {  //遍历当前行的所有列
//                        if(xSheet.getRow(i).getCell(3)==null){//为空执行下次循环
//                            System.out.println("当前第"+(i+1)+"行的地址为空");
//                            continue;
//                        }
//                        fillStr = (xSheet.getRow(i)).getCell(j).toString();//获取当前单元格的数据
//                        if(StringUtils.isNotEmpty(fillStr)){
//                            fillSplit=fillStr.split("_");//切割，本人的数据是以"_"为分隔符的这个可以根据自己情况改变
////                        XSSFRow xRow = xSheet.createRow(i);
////                        XSSFCell xCell = xRow.createCell(j);
//                            XSSFCell xCell=xSheet.getRow(i).getCell(j); //获取单元格对象，这块不能向上边那两句代码那么写，不能用createXXX，用的话会只把第一列的数据改掉
//                            xCell.setCellValue(fields.get(fillSplit[0].trim())==null?fillStr:fields.get(fillSplit[0].trim()));//修改数据，看数据是否和字段集合中的数据匹配，不匹配使用元数据
////                        System.out.println(fields.get(fillSplit[0].trim()));
//                        }
//                    }
                }

                FileOutputStream out = new FileOutputStream(fileName);
                xwb.write(out);
                out.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        private String getValue(XSSFCell xCell) {
            if (xCell.getCellType() == CellType.BOOLEAN) {

                return String.valueOf(xCell.getBooleanCellValue());
            } else if (xCell.getCellType() == CellType.NUMERIC) {

                return String.valueOf(xCell.getNumericCellValue());
            } else {

                return String.valueOf(xCell.getStringCellValue());
            }

        }

        private Map<String, String> getFieldMap(){
            Map<String, String> fields = new HashMap<String, String>();
//            try{
//                String fileName = "E:\\销售货物或者提供应税劳务服务清单115)-迅捷PDF转换器.xlsx";
//                XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(fileName));
//
//                XSSFSheet xSheet = xwb.getSheetAt(3);
//                for (int i = 0; i <= xSheet.getLastRowNum(); i++) {
//                    fields.put(xSheet.getRow(i).getCell(0).toString(),xSheet.getRow(i).getCell(1).toString());
//                    System.out.println("---"+xSheet.getRow(i).getCell(0)+"*---"+fields.get("A1"));
//                }
//            }
//            catch(Exception e){
//                e.printStackTrace();
//            }
            return fields;
        }
         public static void main(String[] args) {
            WriteExcelPOI a = new WriteExcelPOI();
            
            a.writeExcelPOI();
        }
    }